cmake_minimum_required (VERSION 3.12)
###################### genSDK ######################
# core implementation of the mimic library        #
####################################################

################### Variables ####################
# Change if you want modify path or other values #
##################################################
# library version
set(MIMIC_VERSION ${PROJECT_VERSION})
# library name
set(MIMIC_NAME ${PROJECT_NAME})


################# Libraries #################
#   Define external third party libraries   #
#############################################
include(FetchContent)

set(FETCHCONTENT_UPDATES_DISCONNECTED TRUE)
FetchContent_Declare(spdlog
  GIT_REPOSITORY https://github.com/gabime/spdlog.git
  GIT_TAG 76fb40d95455f249bd70824ecfcae7a8f0930fa3
)

FetchContent_GetProperties(spdlog)
if(NOT spdlog_POPULATED)
  FetchContent_Populate(spdlog)
  add_subdirectory(${spdlog_SOURCE_DIR} ${spdlog_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()

FetchContent_Declare(download_pfnc_h
URL https://www.emva.org/wp-content/uploads/PFNC.h
DOWNLOAD_NO_EXTRACT true
)
FetchContent_MakeAvailable(download_pfnc_h)
message("download_pfnc_h_SOURCE_DIR: ${download_pfnc_h_SOURCE_DIR}")


################# Files #################
#   Define files and paths to project.  #
#########################################
file(GLOB MIMIC_SRC_FILES
    "src/*.cpp"
    "src/*.hpp"
    "src/features/*.cpp"
    "src/features/*.hpp"
    "${download_pfnc_h_SOURCE_DIR}/PFNC.h"
)
file(GLOB MIMIC_PUBLIC_HEADER_FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/inc/*.hpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/inc/features/*.hpp"
)

set(MIMIC_PRIVATE_INCLUDE_PATH 
    ${CMAKE_CURRENT_SOURCE_DIR}/src 
    ${download_pfnc_h_SOURCE_DIR}
)
set(MIMIC_PUBLIC_INCLUDE_PATH 
    ${CMAKE_CURRENT_SOURCE_DIR}/inc 
)

####################### Target #######################
#   Define target library and configure properties   #
######################################################
# Static library
add_library(${MIMIC_NAME} STATIC
    ${MIMIC_SRC_FILES}
    ${MIMIC_PUBLIC_HEADER_FILES}
)

set_target_properties(${MIMIC_NAME} PROPERTIES 
    POSITION_INDEPENDENT_CODE ON
    VERSION ${MIMIC_VERSION}
    SOVERSION  ${MIMIC_VERSION}
    PUBLIC_HEADER "${MIMIC_PUBLIC_HEADER_FILES}"
    CXX_VISIBILITY_PRESET hidden
)

target_include_directories(${MIMIC_NAME} PUBLIC ${MIMIC_PUBLIC_INCLUDE_PATH} PRIVATE ${MIMIC_PRIVATE_INCLUDE_PATH})
target_compile_definitions(${MIMIC_NAME} PRIVATE MIMIC_VERSION="${MIMIC_VERSION}")
target_link_libraries(${MIMIC_NAME} PRIVATE spdlog genTL PUBLIC GenApi::GenApi GenApi::GCBase GenApi::XmlParser)
add_dependencies(${MIMIC_NAME} GenApi::GenApi GenApi::GCBase GenApi::XmlParser)

############# Pre/Post Build #############
#  Pre- and/or Post-Build commands       #
##########################################
# copy runtime dependencies
add_custom_command(TARGET ${MIMIC_NAME}
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:GenApi::GenApi> $<TARGET_FILE_DIR:${MIMIC_NAME}>
  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:GenApi::GCBase> $<TARGET_FILE_DIR:${MIMIC_NAME}>
  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:GenApi::XmlParser> $<TARGET_FILE_DIR:${MIMIC_NAME}>
)

#################### Installation ####################
#  Define installation directories for each target   #
######################################################
